将多行数据聚集成单行, 优先支持分组
别名@summarise
使用@summarize后不自动向量化
使用@summarize后移除一层分组
过滤行
只保留计算结果为true的行
跳过计算结果为missing的行
支持&&, &和多表达式三种表示and的语法表示
按指定列去重;
会返回所有列(与R中的不同, R里是只返回去重的列);
优先考虑分组(把分组列当成去重列, 显式地传入, 应该是一样的效果吧?);
用于在@mutate()和@summarize()中操作多列或多个操作函数的辅助函数;
语法across(列选择元组, 函数元组);
列选择元组可以是对列名的辅助函数操作集合, 如(starts_with("Bud"), ends_with("ting"))
函数元组支持融合函数: ∘, 如mean(skipmissing())可以写作mean∘skipmissing
函数元组支持匿名函数, 但目前版本中匿名函数内部不能写融合函数, 将在以后更新中修复该bug
Tidier提供的两个条件处理函数。
需要评估多个条件时, if_else()就不太够用了, 这时用case_when()比较方便:
@bind_rows(dfs..., [id])和@bind_cols(dfs...)进行多个表格的行列拼接:
长宽表转换
@pivot_wider(df, names_from = <xxx/"xxx">, values_from = <yyy/"yyy">)
@pivot_longer(df, <要透视的列名>), [names_to = <xxx/"xxx">, values_to = <yyy/"yyy">])
列名默认是Tidy 语法: 列名的bareword;
如果列名有空格, 则可以用var字符串宏: var"col name"
或者可以用反引号
用@clean_names(case = "camelCase")清理带空格的名字,默认是"snake_case"
使用!!将全局变量插入到代码中
由于必须是全局变量, 所以在写代码时, 建议用@eval宏: @eval(Main, myvar = :b)
在交互REPL中, 则直接赋值即可
变量可以是单个字符或Symbol, 也可以是元组或列表
如果在in中使用值是单个字符的变量插值,需要用[]包括, 不然会把字符展开成字母数组:
全局常量可以直接用!!访问, 如pi
!!不是必须的, 也可以用Main.pi来替代
Tidier_set(option::AbstractString, value::Bool) 设置Tidier包的配置项:
这个是@count()低阶辅助宏, 平时应该用不太到;
@tally(df, [wt], [sort]), 其中wt表示权重列(计算该列总和, 而不是计数), sort::Bool表示是否对计数排序
@count(df, exprs..., [wt], [sort=true/false])
将输入向量n等分, 如果不是n的倍数, 则bin大小最多差1个,大bin在前
可以理解为一个粗略的排名函数, 但是会忽略平局的情况
@drop_na(df, [cols...])
不带参数调用, 删除任何具有缺失的行
指定列作为参数, 则只删除指定列中有缺失的行
@glimpse(df, width = 80)
预览表格, 根据width设置输出宽度(字符数)
@pull(df, col)
提取一列作为向量
TBC...